-- OpenWrt Lua 通用工具模块
-- 版本: 1.2.0

local _M = {}

-- 路径拼接
-- @param ... 路径组件
-- @return 规范化后的路径
function _M.path_join(...)
    local segments = {...}
    local path = table.concat(segments, "/")
    -- 规范化路径
    path = path:gsub("/+", "/")
         :gsub("/%.$", "")
         :gsub("/$", "")
    return path
end

-- 表合并（浅合并）
-- @param ... 多个table
-- @return 合并后的新table
function _M.table_merge(...)
    local result = {}
    for i = 1, select('#', ...) do
        local t = select(i, ...)
        if t then
            for k, v in pairs(t) do
                result[k] = v
            end
        end
    end
    return result
end

-- 检查表是否包含值
-- @param t 目标table
-- @param item 要查找的值
-- @return boolean
function _M.table_contains(t, item)
    for _, v in pairs(t) do
        if v == item then
            return true
        end
    end
    return false
end

-- 字符串分割
-- @param str 输入字符串
-- @param delimiter 分隔符 (默认: ",")
-- @return 分割后的数组
function _M.split(str, delimiter)
    delimiter = delimiter or ","
    local result = {}
    for token in str:gmatch("[^"..delimiter.."]+") do
        table.insert(result, token:match("^%s*(.-)%s*$"))
    end
    return result
end

-- 空值检查
-- @param value 要检查的值
-- @return boolean
function _M.is_empty(value)
    if value == nil then return true end
    if type(value) == "table" then
        return next(value) == nil
    end
    return tostring(value):gsub("%s+", "") == ""
end

-- 生成UUID v4
function _M.uuid_v4()
    local template = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"
    return string.gsub(template, "[xy]", function(c)
        local v = (c == "x") and math.random(0, 0xf) or math.random(8, 0xb)
        return string.format("%x", v)
    end)
end

-- 深度复制表
function _M.deep_copy(obj)
    if type(obj) ~= "table" then return obj end
    local res = {}
    for k, v in pairs(obj) do
        res[_M.deep_copy(k)] = _M.deep_copy(v)
    end
    return res
end

return _M